这一部分的示例见这个项目的 mvc 分支下的 CookieAndHeaderController.java


① 用@CookieValue注解映射 cookie 值

  注解@CookieValue允许一个方法参数允许把一个方法参数绑定到一个 HTTP cookie 值上。我们来考虑下下面的一个从 HTTP 请求中接受到的 cookie:

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

  下面的代码示例演示了怎样获取 JSESSIONID cookie 的值:

    /**
     * 使用@CookieValue获取cookie值
     */
    @RequestMapping("/jSessionId")
    public String cookie(@CookieValue("JSESSIONID") String jSessionId, Model model)
    {
        model.addAttribute("sth", jSessionId);
        return "/examples/targets/test1";
    }

  如果目标方法参数不是字符串,那么就会自动进行类型转换。见“方法参数和类型转换”一节。

  这个注解支持 Servlet 和 Portlet 环境中的处理方法。

② 用@RequestHeader映射请求头属性

  注解@RequestHeader允许把一个请求头绑定到方法参数上。下面是一个请求头示例:

Host        localhost:8080
Accept       text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language  fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding   gzip,deflate
Accept-Charset   ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive     300

  下面的示例演示了怎样获取请求头 Accept-Encoding 和 Keep-Alive 的值:

@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(
        @RequestHeader("Accept-Encoding") String encoding,
        @RequestHeader("Keep-Alive") long keepAlive) 
{
    //...
}

  如果目标方法参数不是字符串,那么就会自动进行类型转换。见“方法参数和类型转换”一节。

  当注解@RequestHeader用在一个Map<String, String>MultiValueMap<String, String>或者HttpHeaders参数上的时候,这个 map 就是收集所有请求头的值。

  注意:内建的类型转换支持,可以把一个用逗号隔开的字符串,转换为一个字符串或者其他类型的数组或者容器(collection)。例如,一个带有@RequestHeader("Accept")的方法参数可以是一个字符串,也可以是一个String[]或者List<String>

  这个注解支持 Servlet 和 Portlet 环境中的处理方法。


行一
51 声望35 粉丝

人不可能记住所有的细节